BlackJumboDogの.NET Core版をMacで動かしてみた。
1 はじめに
私は、BlackJumboDogというフリーソフト(Windowsで動作するサーバーソフト)を公開しているのですが、ソース公開しているおかげで、これを.NET Coreへの移植して下さっている方がおられます。 (まだ作業中ですが、かなり進んでいます)
BlackJumboDog
CoreCLR版のBlackJumboDog
MicrosoftAzureと.NetFramework好きなメモ帳
今回は、これを手元のMacで動作させてみましたので、その様子を紹介させてください。
2 .NET Core
.NET Coreとは、マイクロソフトが、従来の.NET Frameworkの代わりになるものとして、オープンソースとして公開している新しいフレームワークです。 そして、これは、現状、LinuxとOS Xで動作します。
(1) DNVMとDNX
.NET Coreでアプリケーションを動作させるためには、次の2つが必要です。
- DNVM(.NET Version Manager)
- DNX(.NET Core Execution Environment)
DNVMとは、バージョンマネージャーです。そして、DNXが、.NET Coreの実行環境です。 DNVMを使用して、必要なバージョンのDNXを管理する仕組みです。
それでは、それぞれインストールの手順を見ていきます。
(2) DNVM のインストール
最初に、Homebrewをインストールします。 既にインストールされている場合は、この作業は必要ありません。
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
続いて、Homebrewを使用して、DNVMをインストールします。
brew tap aspnet/dnx brew update brew install dnvm
インストール完了後に作成される、/usr/local/bin/dnvm.shを読み込むことで、使用可能になります。
$ source dnvm.sh
毎回、読み込む必要が無いように、.bash_profileあたりに上記の行を追加しておくことをお勧めし ます。
ここまで来れば、次のコマンドでインストールされていることを確認できます。
$ dnvm
(3) DNX のインストール
次に、先のDNVMを使用して、DNXをインストールします。dnvmのコマンドを確認して頂くと、特定のバージョンをインストールしたり、アンインストールしたりできることが、分かりますが、最新の安定板のDNX for .NET Coreをインストールする場合は、次のようになります。
$dnvm upgrade -r coreclr
デフォルトでmonoがインストールされますので、-r coreclrは必須です。
現在、インストールされているバージョンは、次のコマンドで確認できます。
$ dnvm list Active Version Runtime Architecture OperatingSystem Alias ------ ------- ------- ------------ --------------- ----- * 1.0.0-rc1-update1 coreclr x64 darwin default
3 クローン・コンパイル・実行
(1) コンパイル
それでは、GitHubからcloneしてみます。
$ git clone https://github.com/darkcrash/bjd5 Cloning into 'bjd5'... remote: Counting objects: 7690, done. remote: Total 7690 (delta 0), reused 0 (delta 0), pack-reused 7690 Receiving objects: 100% (7690/7690), 6.11 MiB | 1.07 MiB/s, done. Resolving deltas: 100% (4899/4899), done. Checking connectivity... done. 2016/02/21_09:09:38 hirauchishinichi.local:~/tmp $
続いて、コンパイルと実行です。 なお、コンパイル中、フレームワークをダウンロードする必用がありますので、オンラインでしかコンパイルはできません。
$ cd bjd5 $ run restore $ cd Bjd.CoreCLR $ dnx bjd
コマンドラインとして動作するので、UIはありませんので、Option.iniを編集して起動する感じです。 cloneした状態では、現状、幾つかのプロキシが上がってきました。
(2) 起動前のLISTEN状態
とりあえず、起動前のLISTEN状態を確認しておきます。
$ lsof -nP -iTCP | grep LISTEN 2BUA8C4S2 13891 username 12u IPv4 0x47eab89191f15f09 0t0 TCP 127.0.0.1:6258 (LISTEN) 2BUA8C4S2 13891 username 13u IPv6 0x47eab891833fc129 0t0 TCP [::1]:6258 (LISTEN) 2BUA8C4S2 13891 username 14u IPv4 0x47eab89181541f09 0t0 TCP 127.0.0.1:6263 (LISTEN) 2BUA8C4S2 13891 username 15u IPv6 0x47eab891833fc689 0t0 TCP [::1]:6263 (LISTEN) BetterTou 35914 username 11u IPv4 0x47eab89191635811 0t0 TCP *:63504 (LISTEN) BetterTou 35914 username 12u IPv6 0x47eab89191a76b69 0t0 TCP *:63504 (LISTEN)
(3) BlackJumboDog起動
BlackJumboDog for .NET Coreを起動します。
$ dnx bjd Not allowed change Console.WindowWidth [14:36:23.607][ 7][0] Service.ServiceMain Start [14:36:23.650][ 7][0] Define.Initialize Start [14:36:23.650][ 7][0] ---------------------------------------------------------------- [14:36:23.650][ 7][0] - Bjd.CoreCLR - 1.0.0 [14:36:23.650][ 7][0] - DNXCore,Version=v5.0 [14:36:23.650][ 7][0] ---------------------------------------------------------------- [14:36:23.650][ 7][0] RuntimeServices [14:36:23.650][ 7][0] Microsoft.Dnx.Compilation.ILibraryExporter [14:36:23.650][ 7][0] Microsoft.Extensions.PlatformAbstractions.IApplicationShutdown [14:36:23.650][ 7][0] Microsoft.Extensions.PlatformAbstractions.IApplicationEnvironment [14:36:23.650][ 7][0] Microsoft.Extensions.PlatformAbstractions.IRuntimeEnvironment [14:36:23.650][ 7][0] Microsoft.Extensions.PlatformAbstractions.ILibraryManager ...
(4) 起動後のLISTEN状態
起動後に、複数のLISTENが増えていることが確認できます。
$ lsof -nP -iTCP | grep LISTEN 2BUA8C4S2 13891 username 12u IPv4 0x47eab89191f15f09 0t0 TCP 127.0.0.1:6258 (LISTEN) 2BUA8C4S2 13891 username 13u IPv6 0x47eab891833fc129 0t0 TCP [::1]:6258 (LISTEN) 2BUA8C4S2 13891 username 14u IPv4 0x47eab89181541f09 0t0 TCP 127.0.0.1:6263 (LISTEN) 2BUA8C4S2 13891 username 15u IPv6 0x47eab891833fc689 0t0 TCP [::1]:6263 (LISTEN) BetterTou 35914 username 11u IPv4 0x47eab89191635811 0t0 TCP *:63504 (LISTEN) BetterTou 35914 username 12u IPv6 0x47eab89191a76b69 0t0 TCP *:63504 (LISTEN) dnx 36424 username 72u IPv4 0x47eab891914a9a21 0t0 TCP *:8021 (LISTEN) dnx 36424 username 73u IPv6 0x47eab891921d7ba9 0t0 TCP *:8080 (LISTEN) dnx 36424 username 78u IPv4 0x47eab891914a7f09 0t0 TCP *:8080 (LISTEN) dnx 36424 username 79u IPv6 0x47eab891968d0ba9 0t0 TCP *:8110 (LISTEN) dnx 36424 username 80u IPv4 0x47eab891914aa329 0t0 TCP *:8110 (LISTEN) dnx 36424 username 81u IPv6 0x47eab89191a77629 0t0 TCP *:8025 (LISTEN) dnx 36424 username 82u IPv4 0x47eab8918ed52329 0t0 TCP *:8025 (LISTEN) dnx 36424 username 83u IPv6 0x47eab89191a79bc9 0t0 TCP *:8023 (LISTEN) dnx 36424 username 84u IPv4 0x47eab89190787c31 0t0 TCP *:8023 (LISTEN) dnx 36424 username 85u IPv4 0x47eab891924bbc31 0t0 TCP *:10001 (LISTEN) dnx 36424 username 86u IPv6 0x47eab89191a770c9 0t0 TCP *:5060 (LISTEN) dnx 36424 username 87u IPv4 0x47eab89185785a21 0t0 TCP *:5060 (LISTEN) dnx 36424 username 88u IPv6 0x47eab89191a7abe9 0t0 TCP *:8090 (LISTEN) dnx 36424 username 89u IPv4 0x47eab8918ed53539 0t0 TCP *:8090 (LISTEN) dnx 36424 username 90u IPv6 0x47eab891961f8be9 0t0 TCP *:5050 (LISTEN) dnx 36424 username 91u IPv4 0x47eab8918c449c31 0t0 TCP *:5050 (LISTEN) dnx 36424 username 92u IPv4 0x47eab8918c447811 0t0 TCP *:1080 (LISTEN)
(5) 動作確認
次の絵は、telnetでローカルのBlackJumboDogにポート8080で接続し、HTTPプロキシを経由して、外部のサーバにアクセスしている様子です。
$ telnet localhost 8080 Trying ::1... Connected to localhost. Escape character is '^]'. GET http://www.sapporoworks.ne.jp/ HTTP/1.1 host:127.0.0.1 HTTP/1.1 200 OK Date: Sun, 21 Feb 2016 05:53:41 GMT Server: Apache/2.2.29 Accept-Ranges: bytes Transfer-Encoding: chunked Content-Type: text/html 5a8
4 最後に
今回は、@DarkCrash3氏が作業されているものをコンパイルしてみただけですが、Mac(OS X)でも、綺麗に動作している事が見れて、非常に嬉しいです。
これを機会に、このリポジトリのコミッター目指そうw